package org.agent.aigccore.core.service.log;

import org.agent.aigccore.model.po.OpsLogPO;
import org.agent.aigccore.model.dto.LogQueryDTO;
import org.agent.aigccore.model.vo.PageResultVO;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;

/**
 * 日志服务接口
 * 提供日志的记录、查询、统计等功能
 */
public interface LogService {
    /**
     * 添加日志到队列
     * @param log 日志对象
     */
    void offer(OpsLogPO log);
    
    /**
     * 记录操作日志
     * @param module 模块名
     * @param action 操作名
     * @param userId 用户ID
     * @param success 是否成功
     * @param message 消息
     * @param extra 额外信息
     */
    void logOperation(String module, String action, String userId, String ip, String method, String path, boolean success, String message, Object extra);
    
    /**
     * 记录系统日志
     * @param level 日志级别
     * @param module 模块名
     * @param message 消息
     * @param throwable 异常
     */
    void logSystem(String level, String module, String message, Throwable throwable);
    
    /**
     * 记录调度日志
     * @param schedulerId 调度器ID
     * @param robotId 机器人ID
     * @param taskId 任务ID
     * @param taskType 任务类型
     * @param success 是否成功
     * @param message 消息
     * @param extra 额外信息
     */
    void logSchedule(String schedulerId, String robotId, String taskId, String taskType, boolean success, String message, Object extra);
    
    /**
     * 记录设备日志
     * @param deviceId 设备ID
     * @param deviceType 设备类型
     * @param action 操作名
     * @param success 是否成功
     * @param message 消息
     * @param deviceData 设备数据
     */
    void logDevice(String deviceId, String deviceType, String action, boolean success, String message, Object deviceData);
    
    /**
     * 分页查询日志
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResultVO<OpsLogPO> queryLogs(LogQueryDTO queryDTO);
    
    /**
     * 根据ID查询日志
     * @param id 日志ID
     * @return 日志信息
     */
    OpsLogPO getLogById(Long id);
    
    /**
     * 根据请求ID查询日志
     * @param requestId 请求ID
     * @return 日志列表
     */
    List<OpsLogPO> getLogsByRequestId(String requestId);
    
    /**
     * 获取日志聚合统计
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    List<Map<String, Object>> getLogStats(OffsetDateTime startTime, OffsetDateTime endTime);
    
    /**
     * 获取日志趋势统计
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param interval 时间间隔
     * @return 趋势统计结果
     */
    List<Map<String, Object>> getLogTrend(OffsetDateTime startTime, OffsetDateTime endTime, String interval);
}



